<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class CreateTaskMonthWorkHourRecordTable extends AbstractMigration
{
    public function up()
    {
        $this
            ->table('task_month_work_hour_record', ['id' => false, 'primary_key' => ['id'], 'engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => '任务月度工时记录'])
            ->addColumn('id', 'integer', [
                'identity' => true,
                'signed' => false,
                'limit' => 11,
                'comment' => '主键ID'
            ])
            ->addColumn('tenant_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '租户id'
            ])
            ->addColumn('project_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '所属项目id'
            ])
            ->addColumn('user_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '用户id'
            ])
            ->addColumn('episode_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '剧集id'
            ])
            ->addColumn('step_category_ids', 'json', [
                'null' => true,
                'comment' => '大环节id list'
            ])
            ->addColumn('step_category_name', 'string', [
                'null' => false,
                'default' => '',
                'limit' => 40,
                'comment' => '大环节名称'
            ])
            ->addColumn('entity_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '实体id'
            ])
            ->addColumn('module_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '实体模块id'
            ])
            ->addColumn('task_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '任务id'
            ])
            ->addColumn('step_category_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '环节id'
            ])
            ->addColumn('step_id', 'integer', [
                'signed' => false,
                'limit' => 11,
                'default' => 0,
                'comment' => '工序id'
            ])
            ->addColumn('month_time', 'integer', [
                'signed' => false,
                'null' => false,
                'default' => 0,
                'limit' => 11,
                'comment' => '工时月份时间戳'
            ])
            ->addColumn('cost', 'decimal', [
                'default' => "0.00",
                'null' => false,
                'signed' => false,
                'precision' => 20,
                'scale' => 6,
                'comment' => "花费工时",
            ])
            ->addColumn('remain', 'decimal', [
                'default' => "0.00",
                'null' => false,
                'signed' => false,
                'precision' => 20,
                'scale' => 6,
                'comment' => "剩余工时",
            ])
            ->addColumn('created_by', 'integer', ['signed' => false, 'null' => false, 'default' => 0, 'limit' => 11, 'comment' => '创建人'])
            ->addColumn('created', 'integer', ['signed' => false, 'null' => false, 'default' => 0, 'limit' => 11, 'comment' => '创建时间'])
            ->addIndex(['task_id', 'month_time'], ['type' => 'unique', 'name' => 'idx_task_month'])
            ->addIndex(['project_id'], ['type' => 'normal', 'name' => 'idx_project'])
            ->addIndex(['task_id'], ['type' => 'normal', 'name' => 'idx_task'])
            ->addIndex(['month_time'], ['type' => 'normal', 'name' => 'idx_month_time'])
            ->addIndex(['step_category_name'], ['type' => 'normal', 'name' => 'idx_step_category'])
            ->create();
    }

    public function down()
    {
        $this->table('task_month_work_hour_record')->drop()->save();
    }
}
